package com.wb3.meta.common.plugin;


import com.wb3.meta.common.pojo.ResultT;
import com.github.pagehelper.Page;

import java.util.List;

/**
 * service通用方法统一接口类
 * 如果统一接口类不满足需求，可以单独编写service接口方法
 *
 * @param <REQ>   req请求vo
 * @param <RES>   res返回vo
 * @param <MODEL> 实体类
 */
public interface CommonResultServiceInterface<REQ, RES, MODEL> {

    /**
     * 分页查询方法
     *
     * @param vo
     * @return
     */
    Page<RES> getModelPage(REQ vo);

    /**
     * 列表查询方法 -返回 res 对象
     *
     * @param vo
     * @return
     */
    List<RES> getModelListByConditions(REQ vo);

    /**
     * 根据条件查询单条数据方法，返回res vo类
     *
     * @param vo
     * @return
     */
    RES getResModelByConditions(REQ vo);

    /**
     * 根据条件查询单个对象方法
     *
     * @param model
     * @return
     */
    MODEL getModelByConditions(MODEL model);

    /**
     * 根据id查询单个对象方法
     *
     * @param id
     * @return
     */
    MODEL getModelById(Object id);

    /**
     * 新增对象方法
     *
     * @param model
     */
    void addModel(MODEL model);

    /**
     * 更新对象方法
     *
     * @param model
     */
    void updateModel(MODEL model);

    /**
     * 根据id删除对象方法
     *
     * @param id
     */
    void deleteModelById(Object id);


    /**
     * 获取分页数据，返回 map对象方法
     *
     * @param vo
     * @return
     */
    ResultT getModelMapPage(REQ vo);

    /**
     * 根据id查询单个对象方法，返回 map对象方法
     *
     * @param id
     * @return
     */
    ResultT getModelMapById(Object id);

    /**
     * 根据条件查询单个对象，返回map对象方法
     *
     * @param model
     * @return
     */
    ResultT getModelMapByConditions(MODEL model);


    /**
     * 查询列表-map对象
     * @param vo
     * @return
     */
    ResultT getResModelListMapByConditions(REQ vo);

    /**
     * 根据条件查询res vo对象，返回map对象方法
     *
     * @param vo
     * @return
     */
    ResultT getResModelMapByConditions(REQ vo);

    /**
     * 更新或插入对象方法
     *
     * @param vo
     * @return
     */
    ResultT saveOrUpdate(REQ vo);

    /**
     * 根据条件删除方法
     *
     * @param vo
     * @return
     */
    ResultT delete(REQ vo);

}
